;
define(function() {
	/**
	 * 字符串格式化组件
	 */
	var MOStringFormat = function() {
		return new MOStringFormat.init();
	};
	var pt = MOStringFormat.prototype;
	MOStringFormat.init = function() {};
	MOStringFormat.init.prototype = pt;

	//所有
	MOStringFormat.ALL = 1;

	//前后
	MOStringFormat.AFTER_BEFORE = 2;

	//前
	MOStringFormat.BEFORE = 3;

	//后
	MOStringFormat.AFTER = 4;

	/**
	 * 去掉空格
	 * @param {String} str 字符串
	 * @param {Number} type 类型 
	 */
	pt.trim = function(str, type) {

		type = type || MOStringFormat.AFTER_BEFORE;

		switch(type) {

			case MOStringFormat.ALL:

				return str.replace(/s+/g, "");

			case MOStringFormat.AFTER_BEFORE:

				return str.replace(/(^s*)|(s*$)/g, "");

			case MOStringFormat.BEFORE:

				return str.replace(/(^s*)/g, "");

			case MOStringFormat.AFTER:

				return str.replace(/(s*$)/g, "");

			default:
				return str;
		}
	}

	MOStringFormat.FIRST_UPPER = 1;
	MOStringFormat.FIRST_LOWER = 2;
	MOStringFormat.REVERSE = 3;
	MOStringFormat.ALL_UPPER = 4;
	MOStringFormat.ALL_LOWER = 5;

	/**
	 * 字符大小写转换
	 * @param {String} str 字符串
	 * @param {Number} type 类型
	 */
	pt.convertCase = function(str, type) {

		type = type || MOStringFormat.ALL_UPPER;

		switch(type) {

			case MOStringFormat.FIRST_UPPER:
				return str.replace(/\b\w+\b/g, function(word) {
					return word.substring(0, 1).toUpperCase() + word.substring(1);
				});

			case MOStringFormat.FIRST_LOWER:
				return str.replace(/\b\w+\b/g, function(word) {
					return word.substring(0, 1).toLowerCase() + word.substring(1);
				});

			case MOStringFormat.REVERSE:
				return str.split('').map(function(word) {

					if(/[a-z]/.test(word)) {
						return word.toUpperCase();
					} else {
						return word.toLowerCase()
					}

				}).join('')

			case MOStringFormat.ALL_UPPER:

				return str.toUpperCase();

			case MOStringFormat.ALL_LOWER:
				return str.toLowerCase();

			default:
				return str;

		}
	}

	/**
	 * 密码强度
	 * @param {Object} password 密码
	 */
	pt.passwordStrength = function(password) {

		var strength = 0;

		if(password.length < 6) {
			return strength
		}

		if(/[0-9]/.test(password)) {
			strength++
		}

		if(/[a-z]/.test(password)) {
			strength++
		}

		if(/[A-Z]/.test(password)) {
			strength++
		}

		if(/[.|-|_]/.test(password)) {
			strength++
		}

		return strength;

	}

	/**
	 * 替换HTML字符
	 * @param {Object} html html
	 */
	pt.htmlToString = function(html) {
		//TODO 替换HTML字符
		return html;
	}

	/**
	 * 生成UUID
	 */
	pt.generateUUID = function() {
		var d = new Date().getTime();
		var uuid = 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {
			var r = (d + Math.random() * 16) % 16 | 0;
			d = Math.floor(d / 16);
			return(c == 'x' ? r : (r & 0x3 | 0x8)).toString(16);
		});
		return uuid;
	};

	/**
	 * 以str字符串开头
	 * @param {String} str 字符串
	 * @param {String} prefix 前缀
	 */
	pt.startWith = function(str, prefix) {
		var reg = new RegExp("^" + prefix);
		return reg.test(str);
	};

	/**
	 * 以str字符串结尾
	 * @param {String} str 字符串
	 * @param {String} suffix 后缀
	 */
	pt.endWith = function(str, suffix) {
		var reg = new RegExp(suffix + "$");
		return reg.test(str);
	};

	/**
	 * 格式化
	 * @param {Object} obj
	 */
	pt.format = function(str, obj) {
		var temp = str.replace(/\{(\w+)\}/g, function(k1, k2) {
			return obj[k2];
		});
		return temp;
	};

	mofum.extend(MOStringFormat, Object);
	return MOStringFormat;
});